'use strict';
const db = uniCloud.database()

exports.main = async (event, context) => {
	const { action, table_id, user_id, user_name } = event
	
	// 验证用户权限
	if (!user_id) {
		return {
			code: 403,
			message: '未登录或权限不足'
		}
	}
	
	try {
		// 开台操作
		if (action === 'start') {
			// 检查用户是否已有正在使用的台球桌
			const userCheckRes = await db.collection('yijia-taiqiu-usage')
				.where({
					user_id,
					status: 'using'
				})
				.get()
			console.log(userCheckRes)
			if (userCheckRes.data && userCheckRes.data.length > 0) {
				return {
					code: 400,
					message: '您已有正在使用的台球桌，请先结束当前使用'
				}
			}
			
			// 检查台球桌是否已被使用
			const checkRes = await db.collection('yijia-taiqiu-usage')
				.where({
					table_id,
					status: 'using'
				})
				.get()
				
			if (checkRes.data && checkRes.data.length > 0) {
				return {
					code: 400,
					message: '该台球桌正在使用中'
				}
			}
			
			// 获取费率
			const rateRes = await db.collection('yijia-xitongpeizhi')
				.where({
					key: 'taiqiujifei'
				})
				.get()
				
			const hourlyRate = rateRes.data && rateRes.data[0] ? rateRes.data[0].value : 0
			
			// 获取最小使用时间配置
			const minTimeRes = await db.collection('yijia-xitongpeizhi')
				.where({
					key: 'min_use_minutine'
				})
				.get()
				
			const minMinutes = minTimeRes.data && minTimeRes.data[0] ? parseInt(minTimeRes.data[0].value) : 20
			
			// 计算最低消费金额
			const minuteRate = hourlyRate / 60
			const minimumAmount = (minMinutes * minuteRate).toFixed(2)
			
			// 查询用户当前余额
			const userRes = await db.collection('uni-id-users')
				.where({
					_id: user_id
				})
				.get()
				
			if (!userRes.data || userRes.data.length === 0) {
				return {
					code: 400,
					message: '未找到用户信息'
				}
			}
			
			const user = userRes.data[0]
			const currentBalance = user.balance || 0
			
			// 检查余额是否足够支付最低消费
			if (currentBalance < parseFloat(minimumAmount)) {
				return {
					code: 400,
					message: `余额不足，最低消费${minimumAmount}元，请先充值`
				}
			}
			
			// 创建使用记录
			const startTime = new Date()
			const usageRes = await db.collection('yijia-taiqiu-usage').add({
				table_id,
				table_name: table_id,
				user_id,
				user_name,
				start_time: startTime.getTime(),
				status: 'using',
				hourly_rate: parseFloat(hourlyRate),
				total_amount: 0
			})
			
			return {
				code: 200,
				message: '开台成功',
				data: usageRes
			}
		}
		// 关台操作
		else if (action === 'end') {
			console.log('开始关台操作，参数：', { table_id, user_id, user_name })
			
			// 查找当前使用记录
			const usageRes = await db.collection('yijia-taiqiu-usage')
				.where({
					table_id,
					status: 'using'
				})
				.orderBy('start_time', 'desc')
				.limit(1)
				.get()
			
			console.log('查询使用记录结果：', usageRes)
			
			if (!usageRes.data || usageRes.data.length === 0) {
				return {
					code: 400,
					message: '未找到使用记录'
				}
			}
			
			const usage = usageRes.data[0]
			console.log('当前使用记录：', usage)
			
			// 验证是否是当前用户开的台
			if (usage.user_id !== user_id) {
				console.log('用户权限验证失败：', { usage_user_id: usage.user_id, current_user_id: user_id })
				return {
					code: 403,
					message: '无权操作此台球桌'
				}
			}
			
			const endTime = new Date()
			const startTime = new Date(usage.start_time)
			
			// 计算使用时长（分钟）
			const durationMs = endTime.getTime() - startTime.getTime()
			const minutes = Math.ceil(durationMs / (1000 * 60))
			console.log('使用时长计算：', { durationMs, minutes })
			
			// 获取最小使用时间配置
			const minTimeRes = await db.collection('yijia-xitongpeizhi')
				.where({
					key: 'min_use_minutine'
				})
				.get()
				
			const minMinutes = minTimeRes.data && minTimeRes.data[0] ? parseInt(minTimeRes.data[0].value) : 20
			
			// 计算费用
			const minuteRate = usage.hourly_rate / 60
			const billableMinutes = Math.max(minutes, minMinutes) // 使用配置的最小分钟数
			const totalAmount = (billableMinutes * minuteRate).toFixed(2)
			console.log('费用计算：', { minuteRate, billableMinutes, totalAmount })
			
			// 查询用户当前余额
			const userRes = await db.collection('uni-id-users')
				.where({
					_id: user_id
				})
				.get()
				
			console.log('查询用户信息结果：', userRes)
				
			if (!userRes.data || userRes.data.length === 0) {
				return {
					code: 400,
					message: '未找到用户信息'
				}
			}
			
			const user = userRes.data[0]
			const currentBalance = user.balance || 0
			
			// 扣除用户余额（允许余额为负）
			await db.collection('uni-id-users').doc(user_id).update({
				balance: currentBalance - parseFloat(totalAmount)
			})
			
			// 更新使用记录
			await db.collection('yijia-taiqiu-usage').doc(usage._id).update({
				end_time: endTime.getTime(),
				status: 'finished',
				total_amount: parseFloat(totalAmount)
			})
			
			return {
				code: 200,
				message: '关台成功',
				data: {
					minutes,
					billableMinutes,
					totalAmount
				}
			}
		}
		else {
			return {
				code: 400,
				message: '无效的操作类型'
			}
		}
	} catch (e) {
		console.error('操作失败：', e)
		return {
			code: 500,
			message: '操作失败',
			error: e.message || '未知错误'
		}
	}
} 